package com.ruoyi.delivery.service;

import com.ruoyi.delivery.domain.DelOperatorTransportDetail;
import com.ruoyi.delivery.domain.DelOperatorTransportOrder;

import java.util.List;

/**
 * 运输订单 服务层
 *
 * @author hu
 */
public interface IDelOperatorTransportOrderService {

    /**
     * 根据条件筛选运输订单（支持分页）
     * @param logisticId 物流ID
     * @param trackingNumber 运单号（支持模糊搜索）
     * @param origin 发货地（支持模糊搜索）
     * @param destination 目的地（支持模糊搜索）
     * @param departStartDate 调拨日期范围的起始日期
     * @param departEndDate 调拨日期范围的结束日期
     * @param arriveStartDate 预计到达日期范围的起始日期
     * @param arriveEndDate 预计到达日期范围的结束日期
     * @param state 运单状态
     * @param customerType 客户类型
     * @param page 当前页码（从 1 开始）
     * @param pageSize 每页记录数
     * @return 满足条件的运输订单列表
     */
    List<DelOperatorTransportOrder> filterOperatorTransportOrders(
            String logisticId,
            String trackingNumber,
            String origin,
            String destination,
            String departStartDate,
            String departEndDate,
            String arriveStartDate,
            String arriveEndDate,
            String state,
            String customerType,
            int page,
            int pageSize
    );

    /**
     * 根据条件获取运输订单总数
     * @param logisticId 物流ID
     * @param trackingNumber 运单号（支持模糊搜索）
     * @param origin 发货地（支持模糊搜索）
     * @param destination 目的地（支持模糊搜索）
     * @param departStartDate 调拨日期范围的起始日期
     * @param departEndDate 调拨日期范围的结束日期
     * @param arriveStartDate 预计到达日期范围的起始日期
     * @param arriveEndDate 预计到达日期范围的结束日期
     * @param state 运单状态
     * @param customerType 客户类型
     * @return 满足条件的运输订单总数
     */
    int getOperatorTransportOrderCount(
            String logisticId,
            String trackingNumber,
            String origin,
            String destination,
            String departStartDate,
            String departEndDate,
            String arriveStartDate,
            String arriveEndDate,
            String state,
            String customerType);

    /**
     * 插入运输订单
     * @param order 运输订单对象
     * @return 是否插入成功
     */
    boolean insertOperatorTransportOrder(DelOperatorTransportOrder order);

    /**
     * 删除运输订单
     * @param trackingNumber 运单号
     * @return 是否删除成功
     */
    boolean deleteOperatorTransportOrder(String trackingNumber);

    /**
     * 修改运输订单
     * @param order 运输订单对象
     * @return 是否修改成功
     */
    boolean updateOperatorTransportOrder(DelOperatorTransportOrder order);

    /**
     * 根据 trackingNumber 获取所有运输订单明细
     * @param trackingNumber 运单号
     * @return 运输订单明细列表
     */
    List<DelOperatorTransportDetail> getDetailsByTrackingNumber(String trackingNumber);

    int confirmOperatorTransportOrder(String trackingNumber, String updatedPerson);
    /**
     * 修改预期到货时间
     * @param trackingNumber 运单号
     * @param departureDate 新的到货时间
     * @param updatedPerson 修改人
     */
    public void changeExpectedArrivalTime(String trackingNumber, String departureDate, String updatedPerson);
}
